package com.kevinkk.array;

/**
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
 * 假设 nums 中不等于 val 的元素数量为 k，要通过此题，您需要执行以下操作：
 * 更改 nums 数组，使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
 * 返回 k
 *
 * 双指针法的精髓就在于
 * 慢指针永远指向的下一个要放入的位置，而快指针是用来遍历元素的
 * 如果最后需要返回调整之后数组的元素个数，那么就是返回 slow 指针的位置
 */
public class RemoveElement {
    public int removeElement(int[] nums, int val) {
        int slow = 0;
        for(int fast = 0; fast < nums.length; fast++){
            // 找到符合要求的元素，就将其移动到指定位置
            // 由于不需要处理其他元素，所以不用交换元素，直接赋值即可
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow ++;
            }
        }
        return slow;
    }
}
